﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using APP_PGM.DB;
using APP_PGM.GUI.Pomocnicze;
using Obsluga.Gui;
using WMAAN.Uzytki;
using WMAAN.Uzytki.Kryptografia;
using WMAAN.Wyliczenia;

namespace APP_PGM.GUI.Formularze
{
    public partial class FormZmianaHasla : Form
    {
        public FormZmianaHasla()
        {
            InitializeComponent();
        }

        public void Init(string aktualneHaslo)
        {
            buttonAnuluj.Visible = false;
            txtAktualneHaslo.Text = aktualneHaslo;
            txtNoweHaslo.Text = string.Empty;
            txtPotworzHaslo.Text = string.Empty;
            txtNoweHaslo.Focus();
        }

        private void buttonOK_Click(object sender, EventArgs e)
        {
            WalidacjaDanychWejsciowych.Wykonaj(prvObslugaBledow, txtAktualneHaslo, "Proszę aktualne hasło",
                                           TypWalidacjiDanych.BRAK_TEKSTU);


            WalidacjaDanychWejsciowych.Wykonaj(prvObslugaBledow, txtNoweHaslo, "Proszę wprowadzić nowe hasło",
                                                   TypWalidacjiDanych.BRAK_TEKSTU);

            WalidacjaDanychWejsciowych.Wykonaj(prvObslugaBledow, txtPotworzHaslo, "Proszę potwózyć nowe hasło",
                                                    TypWalidacjiDanych.BRAK_TEKSTU);

            if (!string.IsNullOrEmpty(prvObslugaBledow.GetError(txtAktualneHaslo))
                    &&
                    !string.IsNullOrEmpty(prvObslugaBledow.GetError(txtNoweHaslo))
                    &&
                    !string.IsNullOrEmpty(prvObslugaBledow.GetError(txtPotworzHaslo)))
            {
                return;
            }

            ZmienHasloUzytkownika();

        }

        private void ZmienHasloUzytkownika()
        {
            if(txtAktualneHaslo.Text != DaneGlobalne.Uzytkownik.haslo.Deszyfruj())
            {
                Komunikaty.pokazBlad("Aktualne hasło jest niepoprawne");
                txtAktualneHaslo.Text = string.Empty;
                txtAktualneHaslo.Focus();
                return;
            }

            if(txtNoweHaslo.Text == txtPotworzHaslo.Text)
            {
                if (!GeneratorHasel.Walidacja(txtNoweHaslo.Text))
                {
                    Komunikaty.pokazBlad(
                        "Hasło nie spełnia wymogów bezpieczeństwa. \nMusi zawierać minimum 1 wielką literę i 1 cyfrę");
                    txtNoweHaslo.Text = string.Empty;
                    txtPotworzHaslo.Text = string.Empty;
                    txtNoweHaslo.Focus();
                    return;
                }


                DaneGlobalne.Uzytkownik.haslo = txtNoweHaslo.Text.Szyfruj();
                PGM baza = PGM.Instancja();
                DataSet_PGM.uzytkownicyRow uzytkownik = baza.dane.uzytkownicy.FindByid_uzytkownicy(DaneGlobalne.Uzytkownik.id_uzytkownicy);
                if (uzytkownik == null)
                {
                    Komunikaty.pokazBlad(
                        "Użytkownik został usunięty.\nSkontaktuj się z administratorem");
                    return;
                }

                uzytkownik.haslo = DaneGlobalne.Uzytkownik.haslo;
                uzytkownik.zmiana_hasla = false;
                baza.ZapiszUzytkownikow();
                Komunikaty.pokazInformacje("Hasło zostało pomyślnie zmienione");
                DialogResult = DialogResult.OK;
                Close();
            }else
            {
                Komunikaty.pokazBlad("Hasła nie są identyczne");
                txtNoweHaslo.Text = string.Empty;
                txtPotworzHaslo.Text = string.Empty;
                txtNoweHaslo.Focus();
                return;
            }
        }
    }
}
